package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Comparator;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.table.AbstractTableModel;

import patronDecorator.ProductoDAO;

import Vista.NewJDialogReporteProducto;

public class ControladorReporteProdMonto {
	private NewJDialogReporteProducto reportProd;
	private ProductoDAO.ProductoMonto[] pmdesc;
	private AbstractTableModel modelo;
	
	public ControladorReporteProdMonto(JFrame frm) {
		reportProd = new NewJDialogReporteProducto(frm);

		reportProd.setVisible(true);
		ProductoDAO pdao = new ProductoDAO();
		pmdesc = pdao.ConsultarProdMontoDesc().toArray(new ProductoDAO.ProductoMonto[1]);
		
		reportProd.getjComboBox1().setModel(new DefaultComboBoxModel(new String[] { "Ascendente", "Descendente" }));
		
		reportProd.getjComboBox1().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (((String) reportProd.getjComboBox1().getSelectedItem()).equals("Ascendente")) {
					Arrays.sort(pmdesc, new Comparator<ProductoDAO.ProductoMonto>() {
						@Override
						public int compare(ProductoDAO.ProductoMonto o1, ProductoDAO.ProductoMonto o2) {
							return Double.compare(o1.monto, o2.monto);
						}
					});
				} else {
					Arrays.sort(pmdesc, new Comparator<ProductoDAO.ProductoMonto>() {
						@Override
						public int compare(ProductoDAO.ProductoMonto o1, ProductoDAO.ProductoMonto o2) {
							return -Double.compare(o1.monto, o2.monto);
						}
					});
				}
				modelo.fireTableStructureChanged();
			}
		});
		reportProd.getjButtonSalir().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				reportProd.dispose();
			}
		});

		modelo = new AbstractTableModel() {
			@Override
			public Object getValueAt(int fila, int columna) {
				ProductoDAO.ProductoMonto p = pmdesc[fila];
				switch (columna) {
				case 0: return p.nombre;
				case 1: return p.monto;
				}
				return null;
			}
			
			@Override
			public int getRowCount() {
				return pmdesc.length;
			}
			
			@Override
			public int getColumnCount() {
				return 2;
			}
			
			@Override
			public String getColumnName(int columna) {
				switch (columna) {
				case 0: return "Nombre";
				case 1: return "Monto";
				}
				return null;
			}
		};
		
		reportProd.getjTableReporteProMonto().setModel(modelo);
	}
	
}
